/*
 * quater.c
 *
 *  Created on: 02.11.2012
 *      Author: Myrex
 */

#include <quater.h>

qtr_err_e quatr_init(quater_t *qt, double re, double i, double j , double k){
	qtr_err_e ret = 0;

	qt->re = re;
	qt->i= i;
	qt->j = j;
	qt->k = k;

	return ret;
}


qtr_err_e quatr_sum(quater_t *qtR, quater_t *qtA , quater_t *qtB){
	qtr_err_e ret = 0;

	qtR->re = qtA->re + qtB->re;
	qtR->i = qtA->i + qtB->i;
	qtR->j = qtA->j + qtB->j;
	qtR->j = qtA->j + qtB->j;
	return ret;
}

qtr_err_e quatr_mul(quater_t *qtR, quater_t *qtA , quater_t *qtB){
	qtr_err_e ret = 0;

	qtR->re = (qtA->re * qtB->re) - (qtA->i*qtB->i) - (qtA->j*qtB->j)- (qtA->k*qtB->k);

	qtR->i = (qtA->re*qtB->i) + (qtA->i*qtB->re) +(qtA->j*qtB->k) -(qtA->k*qtB->j);

	qtR->j = (qtA->re*qtB->j) - (qtA->i*qtB->k) + (qtA->j*qtB->re) + (qtA->k*qtB->i);

	qtR->k = (qtA->re*qtB->k) + (qtA->i*qtB->j) -(qtA->j *qtB->i) + (qtA->k*qtB->re);

	return ret;
}

qtr_err_e quatr_conj(quater_t *qtR, quater_t *qtS){
	qtr_err_e ret = 0;

	qtR->re = qtS->re;
	qtR->i = -1*qtS->i;
	qtR->j = -1*qtS->j;
	qtR->k = -1*qtS->k;

	return ret;
}
